package org.tool.reflect;

/**
 * 有关于 Class 的相关工具类
 *
 * @author 李坤
 * @date 2022/4/16 10:40
 */
public abstract class ClassLoaderUtil {

    /**
     * 返回要使用的默认 ClassLoader：通常是线程上下文 ClassLoader，如果可用；加载 ClassUtils 类的 ClassLoader 将用作后备。
     *
     * @return 默认的 ClassLoader（只有 null 如果系统 ClassLoader 无法访问）
     */
    public static ClassLoader getDefaultClassLoader() {
        ClassLoader classLoader = null;
        try {
            classLoader = Thread.currentThread().getContextClassLoader();
        } catch (Throwable ex) {
            // 无法访问线程上下文 ClassLoader
        }
        if (classLoader == null) {
            // 没有线程上下文类加载器，使用此类的类加载器。
            classLoader = ClassLoaderUtil.class.getClassLoader();

            if (classLoader == null) {
                try {
                    classLoader = ClassLoader.getSystemClassLoader();
                } catch (Throwable ex) {
                    // 无法访问系统 ClassLoader
                }
            }
        }
        return classLoader;
    }

}
